package com.tingfeng.controller;

import com.alibaba.fastjson.JSON;
import com.tingfeng.config.response.ResultModel;
import com.tingfeng.model.UserSaveReq;
import com.tingfeng.model.UserUpdateReq;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Map;

/**
 * 使用 @RequestBody 请求一个 String 字段
 *
 * 增加一些常见接口，测试是否有影响
 */
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 使用 @RequestBody 请求一个 String 字段
     */
    @PostMapping("/test")
    public Object test(@RequestBody String name) {
        logger.info("姓名：" + name);
        return new ResultModel("姓名：" + name);
    }

    /**
     * 使用 @RequestBody 封装
     */
    @PostMapping("/save")
    public Object save(@RequestBody UserSaveReq req) {
        logger.info("保存用户信息：" + JSON.toJSONString(req));
        return new ResultModel(req);
    }

    /**
     * 使用 @RequestBody 封装，带参数验证
     */
    @PostMapping("/update")
    public Object update(@Valid @RequestBody UserUpdateReq req, BindingResult result) {
        if (result.hasErrors()) {
            return ResultModel.fail(result.getFieldError().getDefaultMessage());
        }

        logger.info("修改用户信息：" + JSON.toJSONString(req));
        return new ResultModel(req);
    }

    /**
     * 使用 @PathVariable 获取路径值
     */
    @GetMapping("/info/{userId}")
    public Object info(@PathVariable String userId) {
        logger.info("查询用户id：" + userId);
        return new ResultModel("查询用户id：" + userId);
    }

    /**
     * 使用 @RequestBody 获取map对象
     */
    @PostMapping("/testMap")
    public Object testMap(@RequestBody Map<String, Object> map) {
        logger.info("获取map对象：" + JSON.toJSONString(map));
        return new ResultModel(map);
    }

}
